package com.jinit.jia.boot;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * SpringApplicationRunListener
 *
 * @author JInit
 * @date 2021-08-05
 */
public interface SpringApplicationRunListener {

    /**
     * 当 run 方法第一次启动时立即调用。
     * 可用于非常的早期初始化
     */
    default void starting() {
    }

    /**
     * 一旦环境准备好，但在应用上下文被创建之前调用。
     * @param environment
     */
    default void environmentPrepared(ConfigurableEnvironment environment) {
    }

    /**
     * 一旦应用上下文被创建和准备好，但在加载源之前调用。
     * @param context
     */
    default void contextPrepared(ConfigurableApplicationContext context) {
    }

    /**
     * 一旦应用程序上下文被加载但在它被刷新之前调用
     * @param context
     */
    default void contextLoaded(ConfigurableApplicationContext context) {
    }

    /**
     * 上下文已刷新且应用程序已启动调用
     * @param context
     */
    default void started(ConfigurableApplicationContext context) {
    }

    /**
     * run 方法运行时调用
     * @param context
     */
    default void running(ConfigurableApplicationContext context) {
    }

    /**
     * 在运行应用程序时发生故障时调用
     * @param context
     * @param exception
     */
    default void failed(ConfigurableApplicationContext context, Throwable exception) {
    }
}
